package practice;

import java.io.File;
import java.io.IOException;
import java.util.*;


// 查找带有关键字的指定目录下的全部普通文件，放入集合并打印
public class SearchAllKeyFile {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的根目录（绝对路径 OR 相对路径):");
        String rootDirPath = scanner.next();
        File rootDir = new File(rootDirPath);

        if (!rootDir.isDirectory()) {
            System.out.println("您输入的根目录不存在或者不是目录，退出");
            return;
        }

        System.out.println("请输入要找出的文件名中的字符: ");
        String keyNameSearch = scanner.next();
        List<File> listResult = new ArrayList<>();
        // 因为文件系统是树形结构，所以我们使用深度优先遍历（递归）完成遍历
        scanDirWithContent(rootDir, keyNameSearch, listResult);
        System.out.println("共找到了符合条件的文件 " + listResult.size() + " 个，它们分别是:");
        for (File f : listResult) {
            System.out.println(f.getCanonicalPath());
        }
    }

    private static void scanDirWithContent(File rootDir, String keyNameSearch,
                                           List<File> listResult) throws IOException {
        File[] files = rootDir.listFiles();
        if (files == null || files.length == 0){
            return;
        }

        for (File f : files) {
            if (f.isDirectory()){
                scanDirWithContent(f,keyNameSearch,listResult);
            }else {
                if (f.getName().contains(keyNameSearch)){
                    listResult.add(f.getAbsoluteFile());
                }
            }
        }
    }
}
